import sys

def parse_html_tags(html_content):
    """
    解析 HTML 内容，将每个标签的结构化信息输出。
    :param html_content: 输入的HTML内容
    """
    i = 0
    n = len(html_content)

    while i < n:
        # 检查是否进入标签
        if html_content[i] == '<':
            # 检查是否是结束标签
            if i + 1 < n and html_content[i + 1] == '/':
                # 处理结束标签
                i += 2  # 跳过 '</'
                tag_end_start = i
                # 查找结束标签的结束符 '>'
                while i < n and html_content[i] != '>':
                    i += 1
                if i < n and html_content[i] == '>':
                    i += 1  # 跳过 '>'
                    tag_end_end = i
                    # 提取结束标签的保留字
                    tag_name = html_content[tag_end_start:tag_end_end - 1].strip()
                    # 输出结束标签的结构化信息
                    print(f"tag 结束 {tag_name}")
                    print("-" * 40)  # 分隔线
            else:
                # 处理开始标签
                tag_start = i
                i += 1

                # 查找标签的结束符 '>'
                while i < n and html_content[i] != '>':
                    i += 1

                # 记录标签的结束位置
                if i < n and html_content[i] == '>':
                    i += 1  # 跳过 '>'
                    tag_end = i

                    # 提取标签内容
                    tag_content = html_content[tag_start:tag_end]

                    # 解析标签的结构化信息
                    structured_tag = parse_tag_structure(tag_content)

                    # 输出结构化信息
                    print(structured_tag)
                    print("-" * 40)  # 分隔线
        else:
            i += 1

def parse_tag_structure(tag_content):
    """
    解析标签的结构化信息。
    :param tag_content: 标签内容
    :return: 结构化信息字符串
    """
    # 提取标签的保留字
    tag_name_end = tag_content.find(' ')
    if tag_name_end == -1:
        tag_name = tag_content[1:-1]  # 去掉 '<' 和 '>'
        return f"tag {tag_name} (无属性)"
    else:
        tag_name = tag_content[1:tag_name_end]

    # 提取属性
    attributes = []
    i = tag_name_end + 1
    n = len(tag_content) - 1  # 去掉 '>'

    while i < n:
        # 跳过空白字符
        while i < n and tag_content[i].isspace():
            i += 1

        # 查找属性名
        attr_start = i
        while i < n and tag_content[i] != '=' and not tag_content[i].isspace():
            i += 1
        attr_name = tag_content[attr_start:i]

        # 查找属性值
        if i < n and tag_content[i] == '=':
            i += 1  # 跳过 '='
            # 查找属性值的起始引号
            while i < n and tag_content[i].isspace():
                i += 1
            if i < n and (tag_content[i] == '"' or tag_content[i] == "'"):
                quote_char = tag_content[i]
                i += 1  # 跳过引号
                attr_value_start = i
                # 查找属性值的结束引号
                while i < n and tag_content[i] != quote_char:
                    i += 1
                attr_value = tag_content[attr_value_start:i]
                i += 1  # 跳过引号
                attributes.append(f"- {attr_name} = \"{attr_value}\"")
            else:
                # 如果没有引号，跳过整个属性值
                while i < n and not tag_content[i].isspace() and tag_content[i] != '>':
                    i += 1
        else:
            # 如果没有属性值，跳过
            while i < n and not tag_content[i].isspace() and tag_content[i] != '>':
                i += 1

    # 构建结构化信息
    structured_info = f"tag {tag_name}"
    if attributes:
        structured_info += "\n" + "\n".join(attributes)
    return structured_info

def main():
    """
    命令行工具的主函数。
    """
    # 检查命令行参数
    if len(sys.argv) != 2:
        print("用法: python parse_html.py <目标文件>")
        sys.exit(1)

    # 读取目标文件
    input_file = sys.argv[1]
    try:
        with open(input_file, 'r', encoding='utf-8') as file:
            html_content = file.read()
    except FileNotFoundError:
        print(f"错误: 文件 '{input_file}' 未找到。")
        sys.exit(1)
    except Exception as e:
        print(f"错误: 读取文件时发生错误 - {e}")
        sys.exit(1)

    # 解析 HTML 标签并输出结构化信息
    parse_html_tags(html_content)

if __name__ == "__main__":
    main()
